01 Building a Blog Application
   01 Installing Python
   02 Creating a Python virtual environment
   03 Installing Django
      01 Installing Django with pip
      02 New features in Django 4
   04 Django overview
   05 Main framework components
   06 The Django architecture
   07 Creating your first project
      ch01/07/mysite/settings_00.py
      ch01/07/mysite/urls_00.py
      01 Applying initial database migrations
      02 Running the development server
      03 Project settings
      04 Projects and applications
      05 Creating an application
         ch01/07.05/blog/admin_00.py
         ch01/07.05/blog/models_00.py
         ch01/07.05/blog/views_00.py
   08 Creating the blog data models
      01 Creating the Post model
         ch01/08.01/blog/models_01.py
      02 Adding datetime fields
         ch01/08.02/blog/models_01.py
      03 Defining a default sort order
         ch01/08.03/blog/models_01.py
      04 Adding a database index
         ch01/08.04/blog/models_01.py
      05 Adding a status field
         ch01/08.05/blog/models_01.py
      06 Adding a many-to-one relationship
         ch01/08.06/blog/models_01.py
      07 Activating the application
         Chapter01/mysite/mysite/settings.py
      08 Creating and applying migrations
   09 Creating an administration site for models
      01 Creating a superuser
      02 The Django administration site
      03 Adding models to the administration site
         ch01/09.03/blog/admin_01.py
      04 Customizing how models are displayed
         ch01/09.04/blog/admin_01.py
         Chapter01/mysite/blog/admin.py
   10 Working with QuerySets and managers
      01 Creating objects
      02 Updating objects
      03 Retrieving objects
      04 Deleting objects
      05 When QuerySets are evaluated
      06 Creating model managers
         Chapter01/mysite/blog/models.py
   11 Building list and detail views
      01 Creating list and detail views
         ch01/11.01/blog/views_01.py
         ch01/11.01/blog/views_02.py
      02 Using the get_object_or_404 shortcut
         Chapter01/mysite/blog/views.py
      03 Adding URL patterns for your views
         Chapter01/mysite/blog/urls.py
         Chapter01/mysite/mysite/urls.py
   12 Creating templates for your views
      01 Creating a base template
         Chapter01/mysite/blog/templates/blog/base.html
      02 Creating the post list template
         Chapter01/mysite/blog/templates/blog/post/list.html
      03 Accessing our application
      04 Creating the post detail template
         Chapter01/mysite/blog/templates/blog/post/detail.html
   13 The request/response cycle
   14 Additional resources
   15 Summary
02 Enhancing Your Blog with Advanced Features
   01 Using canonical URLs for models
      ch02/01/blog/models_01.py
      ch02/01/blog/templates/blog/post/list_01.html
   02 Creating SEO-friendly URLs for posts
      ch02/02/blog/models_01.py
   03 Modifying the URL patterns
      ch02/03/blog/urls_01.py
   04 Modifying the views
      ch02/04/blog/views_01.py
      01 Modifying the canonical URL for posts
         ch02/04.01/blog/models_01.py
   05 Adding pagination
      01 Adding pagination to the post list view
         ch02/05.01/blog/views_01.py
      02 Creating a pagination template
         Chapter02/mysite/blog/templates/pagination.html
         ch02/05.02/blog/templates/blog/post/list_01.html
      03 Handling pagination errors
         ch02/05.03/blog/views_01.py
         ch02/05.03/blog/views_02.py
   06 Building class-based views
      01 Why use class-based views
      02 Using a class-based view to list posts
         ch02/06.02/blog/views_01.py
         ch02/06.02/blog/urls_01.py
         Chapter02/mysite/blog/templates/blog/post/list.html
   07 Recommending posts by email
      01 Creating forms with Django
         ch02/07.01/blog/forms_01.py
      02 Handling forms in views
         ch02/07.02/blog/views_01.py
      03 Sending emails with Django
         Chapter02/mysite/mysite/settings.py
      04 Sending emails in views
         ch02/07.04/blog/views_01.py
         ch02/07.04/blog/urls_01.py
      05 Rendering forms in templates
         Chapter02/mysite/blog/templates/blog/post/share.html
         ch02/07.05/blog/templates/blog/post/detail_01.html
   08 Creating a comment system
      01 Creating a model for comments
         Chapter02/mysite/blog/models.py
      02 Adding comments to the administration site
         Chapter02/mysite/blog/admin.py
      03 Creating forms from models
         Chapter02/mysite/blog/forms.py
      04 Handling ModelForms in views
         ch02/08.04/blog/views_01.py
         Chapter02/mysite/blog/urls.py
      05 Creating templates for the comment form
         Chapter02/mysite/blog/templates/blog/post/includes/comment_form.html
         Chapter02/mysite/blog/templates/blog/post/comment.html
      06 Adding comments to the post detail view
         Chapter02/mysite/blog/views.py
      07 Adding comments to the post detail template
         ch02/08.07/blog/templates/blog/post/detail_01.html
         Chapter02/mysite/blog/templates/blog/post/detail.html
   09 Additional resources
   10 Summary
03 Extending Your Blog Application
   01 Adding the tagging functionality
      ch03/01/mysite/settings_01.py
      Chapter03/mysite/blog/models.py
      ch03/01/blog/templates/blog/post/list_01.html
      ch03/01/blog/views_01.py
      ch03/01/blog/urls_01.py
      ch03/01/blog/templates/blog/post/list_02.html
      ch03/01/blog/templates/blog/post/list_03.html
   02 Retrieving posts by similarity
      ch03/02/blog/views_01.py
      ch03/02/blog/views_02.py
      ch03/02/blog/templates/blog/post/detail_01.html
   03 Creating custom template tags and filters
      01 Implementing custom template tags
      02 Creating a simple template tag
         ch03/03.02/blog/templatetags/blog_tags_01.py
         ch03/03.02/blog/templates/blog/base_01.html
      03 Creating an inclusion template tag
         ch03/03.03/blog/templatetags/blog_tags_01.py
         Chapter03/mysite/blog/templates/blog/post/latest_posts.html
         ch03/03.03/blog/templates/blog/base_01.html
      04 Creating a template tag that returns a QuerySet
         ch03/03.04/blog/templatetags/blog_tags_01.py
         ch03/03.04/blog/templates/blog/base_01.html
      05 Implementing custom template filters
      06 Creating a template filter to support markdown syntax
         Chapter03/mysite/blog/templatetags/blog_tags.py
         Chapter03/mysite/blog/templates/blog/post/detail.html
         Chapter03/mysite/blog/templates/blog/post/list.html
   04 Adding a sitemap to the site
      ch03/04/mysite/settings_01.py
      Chapter03/mysite/blog/sitemaps.py
      Chapter03/mysite/mysite/urls.py
   05 Creating feeds for blog posts
      Chapter03/mysite/blog/feeds.py
      Chapter03/mysite/blog/templates/blog/base.html
   06 Adding full-text search to the blog
      01 Installing PostgreSQL
      02 Creating a PostgreSQL database
      03 Dumping the existing data
      04 Switching the database in the project
         ch03/06.04/mysite/settings_01.py
      05 Loading the data into the new database
      06 Simple search lookups
         Chapter03/mysite/mysite/settings.py
      07 Searching against multiple fields
      08 Building a search view
         Chapter03/mysite/blog/forms.py
         ch03/06.08/blog/views_01.py
         Chapter03/mysite/blog/templates/blog/post/search.html
         Chapter03/mysite/blog/urls.py
      09 Stemming and ranking results
         ch03/06.09/blog/views_01.py
      10 Stemming and removing stop words in different languages
      11 Weighting queries
         ch03/06.11/blog/views_01.py
      12 Searching with trigram similarity
         Chapter03/mysite/blog/views.py
   07 Additional resources
   08 Summary
